package com.java.grammer.finaltest.test1;

/**
 * @author luzhikun
 * @date 2020/12/10-20:37
 * static 能修饰的 有 属性 方法  代码块  内部类
 * final:最终的
 * <p>
 * <p>
 * 所以  static final 组合用可以用来修饰  属性 就称作全局常量
 * 修饰 方法  成为
 * <p>
 * <p>
 * <p>
 * <p>
 * final:可以用来修饰的结构：类 、方法、 变量
 * final：用来修饰一个类:这个类就不能被继承
 * <p>
 * 例如：String类 、System类、StringBuffer类
 * <p>
 * final: 用来修饰一个方法： 这个方法就不能被重写了
 * <p>
 * <p>
 * final：用来修饰变量： 此时这个变量就是一个常量了
 * 只能显示赋初始化值
 * 代码块中赋初始化值
 * 构造器中初始化
 * 尤其是使用final修饰形参时 表明形参是一个常量，当我们调用此方法时，
 * 给常量形参赋一个实参以后就只能在方法体中使用这个形参，但不能进行重新赋值
 */
public class FinalTest {
    final int DIUAS = 10;         //final 显式赋值
    final int MATH;
    final int TEST;

    //final  int WU;
    {
        MATH = 20;                    //final代码块赋值
    }

    public FinalTest() {             //final构造器赋值
        this.TEST = 30;
    }

    public void doRadius() {         //final在方法内定义常量
        final int METHOD = 50;
        //radius+=10;
        //WU=40;
    }

    public void test(final int a) {         //final修饰形参
        System.out.println("-------------");
        System.out.println(a);
    }

    public static void main(String[] args) {
        final int num = 10;
        //num+=5;
        FinalTest finalTest = new FinalTest();
        //finalTest.WU=10;
        finalTest.test(10);
    }
}

final class Final1 {


}

//class final2 extends  Final1{}
class AA {
    public final void eat() {

    }
}

class BB extends AA {
    //public final void eat(){                  会报错， 因为final方法不能被重写

    //}
}